/**
 * @author：anlzou
 * @Date：Created in9:15 2021/4/19
 * @Github：https://github.com/anlzou
 * @Description：
 */
package com.anlzou.threadPool;

import java.util.concurrent.*;

public class MyFixedThreadPool {
    /**
     * 固定大小的线程池
     * 测试1
     */
    public void createThreadPool1(){
        //创建一个固定大小的线程池
        ExecutorService es = Executors.newFixedThreadPool(5);

        //运行10个线程,用线程池来创建线程
        for(int i=0;i<10;i++) {
            MyFixedThreadPool mftp = new MyFixedThreadPool();
            es.execute((Runnable) mftp);
        }
        es.shutdown();//回收线程
    }

    /**
     * 固定大小的线程池
     * 测试2
     */
    public void createThreadPool2(){
        //创建一个固定大小的线程池
        ExecutorService es = Executors.newFixedThreadPool(5);
        //Future接受线程的返回值
        //分别用两个线程来计算这个值
        Future<Integer> f1 = es.submit((Callable<Integer>) new MyFixedThreadPool());
        Future<Integer>f2 = es.submit((Callable<Integer>) new MyFixedThreadPool());

        try {

            int a = f1.get();
            int b = f2.get();
            int c = a+b;
            System.out.println(c);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ExecutionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //回收线程池
        es.shutdown();
    }
}
